package cc.rengu.igas.cops.common.dao;

import cc.rengu.oltp.service.common.entity.PayOrderInfo;

import java.util.List;

/**
 * @Description 支付订单表操作接口
 * @Author panky
 * @date 2020/5/16
 **/
public interface CopsPayOrderInfoMapper {

    /**
     * 根据 机构号/商户号 查询支付订单集合
     *
     * @param instId  机构号
     * @param mchntNo 商户号
     * @return 支付订单集合
     * @throws Exception 异常
     */
    List<PayOrderInfo> selectPayOrderInfoByMchntNo(String instId, String mchntNo) throws Exception;

    /**
     * 根据 机构号/订单号 查询支付订单集合
     *
     * @param instId       机构号
     * @param mchntOrderId 商户订单号
     * @param sysSeqNum    流水号
     * @return 支付订单集合
     * @throws Exception 异常
     */
    List<PayOrderInfo> selectPayOrderInfoByOrderId(String instId, String mchntOrderId, String sysSeqNum) throws Exception;

    /**
     * 根据 机构号/订单流水号 查询支付订单集合
     *
     * @param instId    机构号
     * @param sysSeqNum 订单流水号
     * @return 支付订单集合
     * @throws Exception 异常
     */
    PayOrderInfo selectPayOrderInfoBySysSeqNum(String instId, String sysSeqNum) throws Exception;

    /**
     * 根据系统流水号查询支付订单信息
     *
     * @param instId    多法人标识
     * @param sysSeqNum 系统流水号
     * @return 支付订单信息
     * @throws Exception 异常
     */
    List<PayOrderInfo> copsSelectPayOrderInfoByChannelReconKey(String instId, String sysSeqNum) throws Exception;

    /**
     * @param instId
     * @param txnDate
     * @param mchntOrderId
     * @return
     */
    List<PayOrderInfo> selectPayOrderInfoByInstIdTxnDateMchntOrderId(String instId, String txnDate, String mchntOrderId) throws Exception;

    /**
     * 根据主键更新支付订单信息:先使用select for update, 更新成功后才释放锁
     *
     * @param payOrderInfo 支付订单信息
     * @return 0-成功，其它-失败
     * @throws Exception 异常
     */
    int copsUpdatePayOrderInfoByPrimaryKeyWithLock(PayOrderInfo payOrderInfo) throws Exception;

    /**
     * 根据主键更新支付订单信息，where TRANS_STATUS=param1 and BIZ_STATUS=param2
     *
     * @param payOrderInfo 支付订单信息
     * @param transStatus  支付订单表TRANS_STATUS
     * @param bizStatus    支付订单信BIZ_STATUS
     * @return 0-成功，其它-失败
     * @throws Exception 异常
     */
    int copsUpdatePayOrderInfoByPrimaryKeyAndOrderSts(PayOrderInfo payOrderInfo, String transStatus, String bizStatus) throws Exception;
}
